package com.school.campus.service;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class IpProvinceService {
    // 高德IP定位API地址（返回省份、城市等信息）
    private static final String AMAP_IP_URL = "https://restapi.amap.com/v3/ip";
    // 替换为你的高德开发者密钥（需在高德开放平台申请）
    private static final String AMAP_KEY = "9bf69c38512e021f34ac9e54b0d3e554";

    /**
     * 通过IP获取省份
     * @param ip 用户IP地址（如114.114.114.114）
     * @return 省份名称（如"广东省"、"北京市"）
     */
    public String getProvinceByIp(String ip) {
        try {
            // 构建请求URL（IP为空时默认解析服务器端IP）
            String url = AMAP_IP_URL + "?ip=" + ip + "&key=" + AMAP_KEY;

            // 发送HTTP请求（使用RestTemplate或OkHttp）
            RestTemplate restTemplate = new RestTemplate();
            String response = restTemplate.getForObject(url, String.class);

            // 解析JSON响应，提取省份信息
            return parseProvince(response);
        } catch (Exception e) {
            // 异常处理（如API调用失败，返回默认值或抛异常）
            return "未知省份";
        }
    }

    /**
     * 解析高德API响应，提取省份
     * 响应示例：{"status":"1","info":"OK","infocode":"10000","province":"广东省","city":"广州市","adcode":"440100","rectangle":"..."}
     */
    private String parseProvince(String response) {
        try {
            // 使用Jackson解析JSON
            ObjectMapper objectMapper = new ObjectMapper();
            JsonNode jsonNode = objectMapper.readTree(response);
            // 状态码1表示成功
            if ("1".equals(jsonNode.get("status").asText())) {
                return jsonNode.get("province").asText();
            }
            return "未知省份";
        } catch (Exception e) {
            return "解析失败";
        }
    }
}
